package com.disapand.mall.util;

import com.disapand.mall.handle.ResponseStatus;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author disapand
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class FormatResponse {

    /**
     * 状态码
     */
    private  Integer code;

    /**
     * 返回的信息
     */
    private String message;

    /**
     * 返回的数据
     */
    private Object data;

    /**
     * 自定义的 API 返回
     *
     * @param code                  状态码
     * @param message               返回信息
     * @param data                  返回的数据
     * @return FormatResponse
     */
    public static FormatResponse of (Integer code, String message, Object data) {
        return new FormatResponse(code, message, data);
    }

    /**
     * 带状态的 API 返回
     *
     * @param status                状态
     * @param data                  要返回的数据
     * @return FormatResponse
     */
    public static FormatResponse ofStatus(ResponseStatus status, Object data) {
        return of(status.getCode(), status.getMessage(), data);
    }

    /**
     * 返回一个状态的 API
     *
     * @param status                返回的状态
     * @return FormatResponse
     */
    public static FormatResponse ofStatus(ResponseStatus status) {
        return ofStatus(status, null);
    }

    /**
     * 请求成功的 API 返回
     * @return FormatResponse
     */
    public static FormatResponse ofSuccess() {
        return ofStatus(ResponseStatus.SUCCESS, null);
    }

    /**
     * 请求成功且自定义提示信息的 API 返回
     * @return FormatResponse
     */
    public static FormatResponse ofSuccess(String message) {
        return of(ResponseStatus.SUCCESS.getCode(), message,null);
    }

    /**
     * 请求成功且带数据的 API 返回
     *
     * @param data                  要返回的数据
     * @return FormatResponse
     */
    public static FormatResponse ofSuccess(Object data) {
        return ofStatus(ResponseStatus.SUCCESS, data);
    }

    /**
     * 请求成功，自定义提示信息且带数据的 API 返回
     *
     * @param message               自定义的提示信息
     * @param data                  返回的数据
     * @return FormatResponse
     */
    public static FormatResponse ofSuccess(String message, Object data) {
        return of(ResponseStatus.SUCCESS.getCode(), message, data);
    }

}
